package ink.tiptop.learn.mapper.test;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import ink.tiptop.learn.pojo.po.test.TestUserBaseInfoPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author zjf
 * @date 2020-08-16 14:54
 * 强大的条件构造器2
 */
@Mapper
public interface A_LambdaWrapperMapper extends BaseMapper<TestUserBaseInfoPO> {


    /**
     * LambdaWrapper
     * 在QueryWrapper中是获取LambdaQueryWrapper
     * 在UpdateWrapper中是获取LambdaUpdateWrapper
     *
     * 使用 Wrapper 自定义SQL
     * 需求来源:
     * 在使用了mybatis-plus之后, 自定义SQL的同时也想使用Wrapper的便利应该怎么办？
     * 在mybatis-plus版本3.0.7得到了完美解决 版本需要大于或等于3.0.7, 以下两种方案取其一即可
     */
    default void LambdaWrapper() {

    }

    /**
     * LambdaWrapper使用方式1
     * 构建一个lambda查询方法
     */
    default void lambdaWrapper_1() {
        Wrapper<TestUserBaseInfoPO> wrapper = new LambdaQueryWrapper<>();

        // 构建一个lambda查询对象
        LambdaQueryWrapper<TestUserBaseInfoPO> eq = Wrappers.<TestUserBaseInfoPO>lambdaQuery()
                .eq(TestUserBaseInfoPO::getId, 1);
        getAll(eq);

    }

    // 方案一 注解方式 Mapper.java
    @Select("select * from mysql_data ${ew.customSqlSegment}") // 固定的获取条件的方法 ${ew.customSqlSegment}
    List<TestUserBaseInfoPO> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);

    // 方案二 XML形式 Mapper.xml 固定的获取条件的方法 ${ew.customSqlSegment}
    //<select id="getAll" resultType="MysqlData">
    //	SELECT * FROM mysql_data ${ew.customSqlSegment}
    //</select>


}
